// POJ1651 Multiplication Puzzle, O(n^2)算法
// 陈锋
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int NN = 100 + 10;
int N, A[NN], F[NN][NN];  // DP数组, F[i][j]表示取出i～j之间数字的最小花费

int main() {
  scanf("%d", &N);
  // 注意: memset为0x3f会使得每个数组中的数字都为0x3f3f3f3f, 是一个极大值
  memset(F, 0x3f, sizeof F);
  for (int i = 1; i <= N; i++) scanf("%d", A + i);
  for (int len = 2; len <= N; len++)          // 枚举长度
    for (int i = 1; i + len - 1 <= N; i++) {  // 枚举起始点
      F[i][i] = F[i][i + 1] = 0;
      for (int j = i + len - 1, k = i; k < j; k++)
        F[i][j] = min(F[i][k] + F[k][j] + A[i] * A[k] * A[j], F[i][j]);
    }
  printf("%d", F[1][N]);
  return 0;
}
/*
算法分析请参考: 《入门经典-第2版》 9.4.1一节中 最优矩阵链乘
*/
// Accepted 16ms 364kB 680 G++2020-12-08 20:32:07 22197028